// Copyright 2008 Silvio Massari
//
// This file is part of SilvioMassari.Automata
//
// SilvioMassari.Automata is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// SilvioMassari.Automata is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with SilvioMassari.Automata.  If not, see <http://www.gnu.org/licenses/>.
				
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace SilvioMassari.Automata
{
	class TransitionElement<S, T> : Transition<S, T>
	{
		private string ESCAPE = "\\";
		private string[] OPERATORS = new string[] { "(", ")", "*", "&", "|" };

		protected ElementData<S> _element;

		public TransitionElement(ElementData<S> element)
			: base()
		{
            _element = element;
            _from = new State<S, T>();
            _to = new State<S, T>();
            _from.NextByChar.Add(_element.Value, _to);
        }

        public override void Init(Transition<S, T>[] transitions)
        {
            Debug.Assert(transitions == null || transitions.Length == 0);
		}

		public override string ToString()
		{
			string text = _element.ToString();

			foreach (string ope in OPERATORS)
			{
				if (ope == text)
				{
					return ESCAPE + text;
				}
			}
			return text;
		}
	}
}
